package logger

import (
	"context"

	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
)

type logger struct {
	Config       zapcore.EncoderConfig
	Encoder      zapcore.Encoder
	Keys         []any              // 上下文携带的key
	Stack        bool               // 是否开启堆栈信息
	Channel      chan struct{}      // 阻塞管道
	Level        LogLevel           // 输出日志等级
	Target       int                // 日志输出目标
	Split        int                // 日志分割值(时间分割模式:时间值,大小分割模式:文件大小值)目前只支持按照天分割
	Dir          string             // 日志文件目录名
	FileLvSplit  bool               // 日志文件划分等级(true表示文件要按照日志等级划分开）
	FileDaySplit bool               // 日志文件划分天数(true表示文件要按照日志天数划分开）
	Output       *zap.SugaredLogger // 日志输出到终端或不进行文件划分输出句柄
	File         levels             // 日志输出到文件并进行等级划分输出句柄
	Skip         int                // 跳过层数
	TimeLayout   string             // 日期输出格式
	Option       []zap.Option       // 日志参数
	Interval     string             // 间隔符号
}

type levels struct {
	debug *zap.SugaredLogger
	info  *zap.SugaredLogger
	warn  *zap.SugaredLogger
	error *zap.SugaredLogger
	panic *zap.SugaredLogger
}

type Logger interface {
	Debug(ctx context.Context, v string, msg ...any)
	Info(ctx context.Context, v string, msg ...any)
	Warn(ctx context.Context, v string, msg ...any)
	Error(ctx context.Context, v string, msg ...any)
	Panic(ctx context.Context, v string, msg ...any)
}
